iconEuler Examples

Heron Formula

Heron Formula

by R. Grothmann

We compute the area of a triangle with sides a, b and c. First set points into (0,0), (a,0) and (x,y), which form such a triangle. I.e., we solve

Heron Formula

for x and y.

>sol &= solve([x^2+y^2=b^2,(x-a)^2+y^2=c^2],[x,y])
                2    2    2
             - c  + b  + a
       [[x = --------------, y = 
                  2 a
          4      2  2      2  2    4      2  2    4
  sqrt(- c  + 2 b  c  + 2 a  c  - b  + 2 a  b  - a )
- --------------------------------------------------], 
                         2 a
        2    2    2
     - c  + b  + a
[x = --------------, y = 
          2 a
        4      2  2      2  2    4      2  2    4
sqrt(- c  + 2 b  c  + 2 a  c  - b  + 2 a  b  - a )
--------------------------------------------------]]
                       2 a

Extract the solution y.

>ysol &= y with sol[2][2]
                  4      2  2      2  2    4      2  2    4
          sqrt(- c  + 2 b  c  + 2 a  c  - b  + 2 a  b  - a )
          --------------------------------------------------
                                 2 a

We get the Heron formula.

>function F(a,b,c) &= sqrt(factor((ysol*a/2)^2))
       sqrt((- c + b + a) (c - b + a) (c + b - a) (c + b + a))
       -------------------------------------------------------
                                  4

Of course, each rectangular triangle is a well known case.

>F(3,4,5)
6

And it is also obvious, that this is the triangle with maximal area and the two sides 3 and 4.

>plot2d(&F(3,4,x),1,7):

Heron Formula

The general case works too.

>&solve(diff(F(a,b,c)^2,c)=0,c)
                        2    2             2    2
           [c = - sqrt(b  + a ), c = sqrt(b  + a ), c = 0]

Now let us find the set of all points where b+c=d for some constant d. It is well known that this is an ellipse.

>s1 &= subst(d-c,b,sol[2])
                   2    2    2
            (d - c)  - c  + a
       [x = ------------------, y = 
                   2 a
               4      2        2      2        2    4      2  2    4
 sqrt(- (d - c)  + 2 c  (d - c)  + 2 a  (d - c)  - c  + 2 a  c  - a )
 --------------------------------------------------------------------]
                                 2 a

And make functions of this.

>function fx(a,c,d) &= rhs(s1[1]), function fy(a,c,d) &= rhs(s1[2])
                                 2    2    2
                          (d - c)  - c  + a
                          ------------------
                                 2 a


       
                4      2        2      2        2    4      2  2    4
  sqrt(- (d - c)  + 2 c  (d - c)  + 2 a  (d - c)  - c  + 2 a  c  - a )
  --------------------------------------------------------------------
                                  2 a

Now we can draw the set. The side b varies from 1 to 4. It is well known that we get an ellipse.

>plot2d(&fx(3,x,5),&fy(3,x,5),xmin=1,xmax=4,square=1):

Heron Formula

We can check the general equation for this ellipse, i.e.

Heron Formula

where (xm,ym) is the center, and u and v are the half axes.

>&ratsimp((fx(a,c,d)-a/2)^2/u^2+fy(a,c,d)^2/v^2 with [u=d/2,v=sqrt(d^2-a^2)/2])
                                  1

We see that the height and thus the area of the triangle is maximal for x=0. Thus the area of a triangle with a+b+c=d is maximal, if it is equilateral. We wish to derive this analytically.

>eqns &= [diff(F(a,b,d-(a+b))^2,a)=0,diff(F(a,b,d-(a+b))^2,b)=0]
        d (d - 2 a) (d - 2 b)   (- d + 2 b + 2 a) d (d - 2 b)
       [--------------------- - ----------------------------- = 0, 
                  8                           8
            d (d - 2 a) (d - 2 b)   (- d + 2 b + 2 a) d (d - 2 a)
            --------------------- - ----------------------------- = 0]
                      8                           8

We get some minima, which belong to triangles with one side 0, and the solution a=b=c=d/3.

>&solve(eqns,[a,b])
             d      d               d        d
       [[a = -, b = -], [a = 0, b = -], [a = -, b = 0], 
             3      3               2        2
                                                            d      d
                                                       [a = -, b = -]]
                                                            2      2

There is also the Lagrange method, maximizing F(a,b,c)^2 with respect to a+b+d=d.

>&solve([diff(F(a,b,c)^2,a)=la,diff(F(a,b,c)^2,b)=la, ...
    diff(F(a,b,c)^2,c)=la,a+b+c=d],[a,b,c,la])
                    d      d                d             d
       [[a = 0, b = -, c = -, la = 0], [a = -, b = 0, c = -, la = 0], 
                    2      2                2             2
                                                                  3
            d      d                       d      d      d       d
       [a = -, b = -, c = 0, la = 0], [a = -, b = -, c = -, la = ---]]
            2      2                       3      3      3       108

We can make a plot of the situation with the utility functions in geometry.e.

>load geometry;

First set the points in Maxima.

>A &= at([x,y],sol[2])
            2    2    2
         - c  + b  + a
        [--------------, 
              2 a
                           4      2  2      2  2    4      2  2    4
                   sqrt(- c  + 2 b  c  + 2 a  c  - b  + 2 a  b  - a )
                   --------------------------------------------------]
                                          2 a

>B &= [0,0], C &= [a,0]
                                [0, 0]


                                [a, 0]

Then set the plot range, and plot the points.

>setPlotRange(0,5,-2,3); ...
 a=4; b=3; c=2; ...
 plotPoint(mxmeval("B"),"B"); plotPoint(mxmeval("C"),"C"); ...
 plotPoint(mxmeval("A"),"A"):

Heron Formula

Plot the segments.

>plotSegment(mxmeval("A"),mxmeval("C")); ...
 plotSegment(mxmeval("B"),mxmeval("C")); ...
 plotSegment(mxmeval("B"),mxmeval("A")):

Heron Formula

Compute the middle perpendicular in Maxima.

>h &= middlePerpendicular(A,B); g &= middlePerpendicular(B,C);

And the center of the circumference.

>U &= lineIntersection(h,g);

We get the formula for the radius of the circumcircle.

>&assume(a>0,b>0,c>0); & distance(U,B) | radcan
        
                                   I a b c
       ---------------------------------------------------------------
       sqrt(c - b - a) sqrt(c - b + a) sqrt(c + b - a) sqrt(c + b + a)

Let us add this to the plot.

>plotPoint(U()); ...
 plotCircle(circleWithCenter(mxmeval("U"),mxmeval("distance(U,C)"))):

Heron Formula

Using geometry, we derive the simple formula

Heron Formula

for the radius. We can check, if this is really true with Maxima. Maxima will factor this only if we square it.

>& c^2/sin(computeAngle(A,B,C))^2  | factor
                                 2  2  2
                              4 a  b  c
          - -----------------------------------------------
            (c - b - a) (c - b + a) (c + b - a) (c + b + a)

Examples